home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / editor / j414src.arc / SETMAPS.C < prev    next >
C/C++ Source or Header  |  1989-10-10  |  4KB  |  201 lines

  1. /***************************************************************************
  2.  * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne.  JOVE *
  3.  * is provided to you without charge, and with no warranty.  You may give  *
  4.  * away copies of JOVE, including sources, provided that this notice is    *
  5.  * included in all the files.                                              *
  6.  ***************************************************************************/
  7.  
  8. #define TXT_TO_C    1    /* must be a number for MAC compiler */
  9.  
  10. #include <stdio.h>
  11.  
  12. #include "funcdefs.c"
  13.  
  14. #ifdef MAC
  15. #include "vars.c"
  16. #endif
  17.  
  18. private int
  19. matchcmd(choices, what)
  20. register const struct cmd    choices[];
  21. register char    *what;
  22. {
  23.     register int    i;
  24. #ifndef MAC
  25.     size_t    len = strlen(what);
  26. #endif
  27.  
  28.     for (i = 0; choices[i].Name != 0; i++) {
  29.         if (*what != *choices[i].Name)
  30.             continue;
  31. #ifdef MAC /* see "left-margin" and "left-margin-here" */
  32.         if (strcmp(what, choices[i].Name) == 0)
  33. #else
  34.         if (strncmp(what, choices[i].Name, len) == 0)
  35. #endif
  36.         return i;
  37.     }
  38.     return -1;
  39. }
  40.  
  41. #ifdef MAC
  42. matchvar(choices, what)
  43. register struct variable choices[];
  44. register char    *what;
  45. {
  46.     register int    len;
  47.     int    i;
  48.  
  49.     len = strlen(what);
  50.     for (i = 0; choices[i].Name != 0; i++) {
  51.         if (*what != *choices[i].Name)
  52.             continue;
  53.         if (strcmp(what, choices[i].Name) == 0)
  54.             return i;
  55.     }
  56.     return -1;
  57. }
  58. #endif
  59.  
  60. private char *
  61. PPchar(c)
  62. int    c;
  63. {
  64.     static char    str[16];
  65.     char    *cp = str;
  66.  
  67.     if (c & 0200) {
  68.         c &= ~0200;
  69.         strcpy(cp, "M-");
  70.         cp += 2;
  71.     }
  72.     if (c == '\033')
  73.         strcpy(cp, "ESC");
  74. #ifdef IBMPC
  75.     else if (c == '\377')
  76.         strcpy(cp, "M");
  77. #endif /* IBMPC */
  78.     else if (c < ' ')
  79.         (void) sprintf(cp, "C-%c", c + '@');
  80.     else if (c == '\177')
  81.         strcpy(cp, "^?");
  82.     else
  83.         (void) sprintf(cp, "%c", c);
  84.     return str;
  85. }
  86.  
  87. private void
  88. extract(into, from)
  89. char    *into,
  90.     *from;
  91. {
  92.     from += 2;    /* Past tab and first double quote. */
  93.     while ((*into = *from++) != '"')
  94.         into += 1;
  95.     *into = 0;
  96. }
  97.  
  98.  
  99. void
  100.  
  101. #ifdef MAC
  102. _main()        /* for Mac, so we can use redirection */
  103. #else
  104. main(argc, argv)
  105. int    argc;
  106. char    *argv[];
  107. #endif
  108. {
  109.     FILE    *ifile,
  110.         *of;
  111.     char    line[100],
  112. #ifdef MAC
  113.         *which,
  114. #endif
  115.         comname[70];
  116.     int    comnum,
  117.         ch = 0,
  118. #ifdef MAC
  119.         inmenu = 0,
  120. #endif
  121.         savech = -1,
  122.         errors = 0;
  123.  
  124.     ifile = stdin;
  125.     of = stdout;
  126.     if (ifile == NULL || of == NULL) {
  127.         printf("Cannot read input or write output.\n");
  128.         exit(1);
  129.     }
  130.     while (fgets(line, sizeof line, ifile) != NULL) {
  131.         if (strncmp(line, "#if", (size_t) 3) == 0) {
  132.             savech = ch;
  133.             fprintf(of, line);
  134.             continue;
  135.         } else if (strncmp(line, "#else", (size_t) 5) == 0) {
  136.             if (savech == -1)
  137.                 fprintf(stderr, "WARNING: ifdef/endif mismatch!\n");
  138.             else
  139.                 ch = savech;
  140.             fprintf(of, line);
  141.             continue;
  142.         } else if (strncmp(line, "#endif", (size_t) 6) == 0) {
  143.             savech = -1;
  144.             fprintf(of, line);
  145.             continue;
  146. #ifdef MAC
  147.         } else if (strncmp(line, "#MENU", (size_t) 5) == 0) {
  148.             inmenu = 1;
  149.             continue;
  150. #endif
  151.         } else if (strncmp(line, "\t\"", (size_t) 2) != 0) {
  152.             fprintf(of, line);
  153.             ch = 0;
  154.             continue;
  155.         }
  156.         extract(comname, line);
  157.         if (strcmp(comname, "unbound") == 0)
  158.             comnum = 12345;
  159.         else {
  160. #ifdef MAC
  161.             which = "commands";
  162. #endif
  163.             comnum = matchcmd(commands, comname);
  164. #ifdef MAC
  165.             if (comnum < 0 && inmenu) {
  166.                 comnum = matchvar(variables, comname);
  167.                 which = "variables";
  168.             }
  169. #endif
  170.             if (comnum < 0) {
  171. #ifdef MAC
  172.                 fprintf(stderr, "Warning: cannot find item \"%s\".\n", comname);
  173. #else
  174.                 fprintf(stderr, "Warning: cannot find command \"%s\".\n", comname);
  175. #endif
  176.                 errors += 1;
  177.                 comnum = 12345;
  178.             }
  179.         }
  180. #ifdef MAC
  181.         if(inmenu) {
  182.             if (comnum == 12345)
  183.                 fprintf(of, "    (data_obj *) 0,\n");
  184.             else
  185.                 fprintf(of, "    (data_obj *) &%s[%d],\n",which, comnum);
  186.         }
  187.         else {
  188. #endif
  189.         if (comnum == 12345)
  190.             fprintf(of, "    (data_obj *) 0,                 /* %s */\n", PPchar(ch++));
  191.         else
  192.             fprintf(of, "    (data_obj *) &commands[%d],    /* %s */\n", comnum, PPchar(ch++));
  193.     }
  194. #ifdef MAC
  195.     }
  196. #endif
  197.     fclose(of);
  198.     fclose(ifile);
  199.     exit(errors);
  200. }
  201.